library(openprescribingR)
library(tidyverse)
Loading tidyverse: ggplot2
Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
Loading tidyverse: dplyr
package ‘purrr’ was built under R version 3.4.1package ‘dplyr’ was built under R version 3.4.1Conflicts with tidy packages ------------------------------
filter(): dplyr, stats
lag(): dplyr, stats
library(leaflet)
library(sf)
package ‘sf’ was built under R version 3.4.1Linking to GEOS 3.6.1, GDAL 2.1.3, proj.4 4.9.3
library(stringr)
plot2017 <- function(argument)
{
ccggeom <- sf::st_read("https://openprescribing.net/api/1.0/org_location/?org_type=ccg") %>%
dplyr::rename(row_name = name) %>%
dplyr::select(-ons_code, -org_type)
dataframe <- dplyr::full_join(
(openprescribingR::list_size() %>%
dplyr::select(-row_id)),
(openprescribingR::spending_by_CCG(chemical_section_or_presentation_code =
argument)),
by = c("row_name", "date")) %>%
dplyr::mutate(costperperson = actual_cost/total_list_size) %>%
dplyr::full_join(ccggeom, by="row_name") %>%
sf::st_as_sf() %>%
dplyr::mutate(label = stringr::str_c(row_name, " £", format(round(costperperson, 2), nsmall = 2)))
daterange <- dplyr::filter(dataframe, date=="2017-01-01"|date=="2017-02-01"|date=="2017-03-01"|date=="2017-04-01"|date=="2017-05-01")$costperperson
pal <- leaflet::colorNumeric(palette = "magma",
domain = daterange)
leaflet::leaflet(data=dataframe) %>%
leaflet::setView(-1.341739, 53.104565, zoom = 6) %>%
leaflet::addTiles() %>%
leaflet::addPolygons(
data = dplyr::filter(dataframe, date=="2017-05-01"),
weight = 2,
label = dplyr::filter(dataframe,
date=="2017-05-01")$label,
fillOpacity =0.8,
color = ~pal(costperperson),
group = "May",
highlightOptions = highlightOptions(color = "black",
weight = 2)) %>%
leaflet::addPolygons(
data = dplyr::filter(dataframe, date=="2017-04-01"),
weight = 2,
label = dplyr::filter(dataframe,
date=="2017-04-01")$label,
fillOpacity =0.8,
color = ~pal(costperperson),
group = "April",
highlightOptions = highlightOptions(color = "black",
weight = 2)) %>%
leaflet::addPolygons(
data = dplyr::filter(dataframe, date=="2017-03-01"),
weight = 2,
label = dplyr::filter(dataframe,
date=="2017-03-01")$label,
fillOpacity =0.8,
color = ~pal(costperperson),
group = "March",
highlightOptions = highlightOptions(color = "black",
weight = 2)) %>%
leaflet::addPolygons(
data = dplyr::filter(dataframe, date=="2017-02-01"),
weight = 2,
label = dplyr::filter(dataframe,
date=="2017-02-01")$label,
fillOpacity =0.8,
color = ~pal(costperperson),
group = "February",
highlightOptions = highlightOptions(color = "black",
weight = 2)) %>%
leaflet::addPolygons(
data = dplyr::filter(dataframe, date=="2017-01-01"),
weight = 2,
label = dplyr::filter(dataframe,
date=="2017-01-01")$label,
fillOpacity =0.8,
color = ~pal(costperperson),
group = "January",
highlightOptions = highlightOptions(color = "black",
weight = 2)) %>%
leaflet::addLegend("bottomleft", pal = pal, values = daterange,
title = stringr::str_c(argument,
" Items cost per person on CCG list"),
labFormat = labelFormat(prefix = "£"),
opacity = 1
) %>%
leaflet::addLayersControl(
baseGroups = c("May", "April", "March",
"February", "January", "Nothing"),
options = layersControlOptions(collapsed = TRUE)
)
}
plot2017("7.4.5")
Reading layer `OGRGeoJSON' from data source `https://openprescribing.net/api/1.0/org_location/?org_type=ccg' using driver `GeoJSON'
Simple feature collection with 207 features and 3 fields (with 1 geometry empty)
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -6.418591 ymin: 49.86467 xmax: 1.762979 ymax: 55.81111
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Column `row_name` joining factors with different levels, coercing to character vectorColumn `date` joining factors with different levels, coercing to character vectorColumn `row_name` joining character vector and factor, coercing into character vector
openprescribingRplots::plot2017("7.4.1")
Reading layer `OGRGeoJSON' from data source `https://openprescribing.net/api/1.0/org_location/?org_type=ccg' using driver `GeoJSON'
Simple feature collection with 207 features and 3 fields (with 1 geometry empty)
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -6.418591 ymin: 49.86467 xmax: 1.762979 ymax: 55.81111
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Column `row_name` joining factors with different levels, coercing to character vectorColumn `date` joining factors with different levels, coercing to character vectorColumn `row_name` joining character vector and factor, coercing into character vector
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkob3BlbnByZXNjcmliaW5nUikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobGVhZmxldCkKbGlicmFyeShzZikKbGlicmFyeShzdHJpbmdyKQoKcGxvdDIwMTcgPC0gZnVuY3Rpb24oYXJndW1lbnQpCnsKICBjY2dnZW9tIDwtIHNmOjpzdF9yZWFkKCJodHRwczovL29wZW5wcmVzY3JpYmluZy5uZXQvYXBpLzEuMC9vcmdfbG9jYXRpb24vP29yZ190eXBlPWNjZyIpICU+JQogICAgZHBseXI6OnJlbmFtZShyb3dfbmFtZSA9IG5hbWUpICU+JQogICAgZHBseXI6OnNlbGVjdCgtb25zX2NvZGUsIC1vcmdfdHlwZSkKCiAgZGF0YWZyYW1lIDwtIGRwbHlyOjpmdWxsX2pvaW4oCiAgICAob3BlbnByZXNjcmliaW5nUjo6bGlzdF9zaXplKCkgJT4lCiAgICAgICBkcGx5cjo6c2VsZWN0KC1yb3dfaWQpKSwKICAgIChvcGVucHJlc2NyaWJpbmdSOjpzcGVuZGluZ19ieV9DQ0coY2hlbWljYWxfc2VjdGlvbl9vcl9wcmVzZW50YXRpb25fY29kZSA9CiAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQpKSwKICAgIGJ5ID0gYygicm93X25hbWUiLCAiZGF0ZSIpKSAlPiUKICAgIGRwbHlyOjptdXRhdGUoY29zdHBlcnBlcnNvbiA9IGFjdHVhbF9jb3N0L3RvdGFsX2xpc3Rfc2l6ZSkgJT4lCiAgICBkcGx5cjo6ZnVsbF9qb2luKGNjZ2dlb20sIGJ5PSJyb3dfbmFtZSIpICU+JQogICAgc2Y6OnN0X2FzX3NmKCkgJT4lCiAgICBkcGx5cjo6bXV0YXRlKGxhYmVsID0gc3RyaW5ncjo6c3RyX2Mocm93X25hbWUsICIgwqMiLCBmb3JtYXQocm91bmQoY29zdHBlcnBlcnNvbiwgMiksIG5zbWFsbCA9IDIpKSkKCiAgZGF0ZXJhbmdlIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YWZyYW1lLCBkYXRlPT0iMjAxNy0wMS0wMSJ8ZGF0ZT09IjIwMTctMDItMDEifGRhdGU9PSIyMDE3LTAzLTAxInxkYXRlPT0iMjAxNy0wNC0wMSJ8ZGF0ZT09IjIwMTctMDUtMDEiKSRjb3N0cGVycGVyc29uCgogIHBhbCA8LSBsZWFmbGV0Ojpjb2xvck51bWVyaWMocGFsZXR0ZSA9ICJtYWdtYSIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBkYXRlcmFuZ2UpCgogIGxlYWZsZXQ6OmxlYWZsZXQoZGF0YT1kYXRhZnJhbWUpICU+JQogICAgbGVhZmxldDo6c2V0VmlldygtMS4zNDE3MzksIDUzLjEwNDU2NSwgem9vbSA9IDYpICU+JQogICAgbGVhZmxldDo6YWRkVGlsZXMoKSAgJT4lCgogICAgbGVhZmxldDo6YWRkUG9seWdvbnMoCiAgICAgIGRhdGEgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwgZGF0ZT09IjIwMTctMDUtMDEiKSwKICAgICAgd2VpZ2h0ID0gMiwKICAgICAgbGFiZWwgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU9PSIyMDE3LTA1LTAxIikkbGFiZWwsCiAgICAgIGZpbGxPcGFjaXR5ID0wLjgsCiAgICAgIGNvbG9yID0gfnBhbChjb3N0cGVycGVyc29uKSwKICAgICAgZ3JvdXAgPSAiTWF5IiwKICAgICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSkgJT4lCgogICAgbGVhZmxldDo6YWRkUG9seWdvbnMoCiAgICAgIGRhdGEgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwgZGF0ZT09IjIwMTctMDQtMDEiKSwKICAgICAgd2VpZ2h0ID0gMiwKICAgICAgbGFiZWwgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU9PSIyMDE3LTA0LTAxIikkbGFiZWwsCiAgICAgIGZpbGxPcGFjaXR5ID0wLjgsCiAgICAgIGNvbG9yID0gfnBhbChjb3N0cGVycGVyc29uKSwKICAgICAgZ3JvdXAgPSAiQXByaWwiLAogICAgICBoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucyhjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IDIpKSAlPiUKCiAgICBsZWFmbGV0OjphZGRQb2x5Z29ucygKICAgICAgZGF0YSA9IGRwbHlyOjpmaWx0ZXIoZGF0YWZyYW1lLCBkYXRlPT0iMjAxNy0wMy0wMSIpLAogICAgICB3ZWlnaHQgPSAyLAogICAgICBsYWJlbCA9IGRwbHlyOjpmaWx0ZXIoZGF0YWZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZT09IjIwMTctMDMtMDEiKSRsYWJlbCwKICAgICAgZmlsbE9wYWNpdHkgPTAuOCwKICAgICAgY29sb3IgPSB+cGFsKGNvc3RwZXJwZXJzb24pLAogICAgICBncm91cCA9ICJNYXJjaCIsCiAgICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gMikpICU+JQoKICAgIGxlYWZsZXQ6OmFkZFBvbHlnb25zKAogICAgICBkYXRhID0gZHBseXI6OmZpbHRlcihkYXRhZnJhbWUsIGRhdGU9PSIyMDE3LTAyLTAxIiksCiAgICAgIHdlaWdodCA9IDIsCiAgICAgIGxhYmVsID0gZHBseXI6OmZpbHRlcihkYXRhZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlPT0iMjAxNy0wMi0wMSIpJGxhYmVsLAogICAgICBmaWxsT3BhY2l0eSA9MC44LAogICAgICBjb2xvciA9IH5wYWwoY29zdHBlcnBlcnNvbiksCiAgICAgIGdyb3VwID0gIkZlYnJ1YXJ5IiwKICAgICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSkgJT4lCgogICAgbGVhZmxldDo6YWRkUG9seWdvbnMoCiAgICAgIGRhdGEgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwgZGF0ZT09IjIwMTctMDEtMDEiKSwKICAgICAgd2VpZ2h0ID0gMiwKICAgICAgbGFiZWwgPSBkcGx5cjo6ZmlsdGVyKGRhdGFmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU9PSIyMDE3LTAxLTAxIikkbGFiZWwsCiAgICAgIGZpbGxPcGFjaXR5ID0wLjgsCiAgICAgIGNvbG9yID0gfnBhbChjb3N0cGVycGVyc29uKSwKICAgICAgZ3JvdXAgPSAiSmFudWFyeSIsCiAgICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gMikpICU+JQoKICAgIGxlYWZsZXQ6OmFkZExlZ2VuZCgiYm90dG9tbGVmdCIsIHBhbCA9IHBhbCwgdmFsdWVzID0gZGF0ZXJhbmdlLAogICAgICAgICAgICAgIHRpdGxlID0gc3RyaW5ncjo6c3RyX2MoYXJndW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEl0ZW1zIGNvc3QgcGVyIHBlcnNvbiBvbiBDQ0cgbGlzdCIpLAogICAgICAgICAgICAgIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICLCoyIpLAogICAgICAgICAgICAgIG9wYWNpdHkgPSAxCiAgICApICU+JQoKICAgIGxlYWZsZXQ6OmFkZExheWVyc0NvbnRyb2woCiAgICAgIGJhc2VHcm91cHMgPSBjKCJNYXkiLCAiQXByaWwiLCAiTWFyY2giLAogICAgICAgICAgICAgICAgICAgICAiRmVicnVhcnkiLCAiSmFudWFyeSIsICJOb3RoaW5nIiksCiAgICAgIG9wdGlvbnMgPSBsYXllcnNDb250cm9sT3B0aW9ucyhjb2xsYXBzZWQgPSBUUlVFKQogICAgKQp9CgpwbG90MjAxNygiNy40LjUiKQpgYGAKYGBge3J9Cm9wZW5wcmVzY3JpYmluZ1JwbG90czo6cGxvdDIwMTcoIjcuNC4xIikKYGBgCgo=